The following table shows the metadata of the experiment, including the samples that expresses mutant TRIM28 genes.
| |
run_name |
sample_name |
genotype/variation |
infection |
source_name |
treatment |
| 7 |
SRR9602259 |
GSM3905830 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant |
uninfected (mock) |
TRIM28 6KR mock |
6KR_mock |
| 8 |
SRR9602260 |
GSM3905831 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant |
uninfected (mock) |
TRIM28 6KR mock |
6KR_mock |
| 9 |
SRR9602261 |
GSM3905832 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant |
uninfected (mock) |
TRIM28 6KR mock |
6KR_mock |
| 10 |
SRR9602262 |
GSM3905833 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant |
Influenza A/WSN/33, MOI10 PFU/cell, 6hpi |
TRIM28 6KR IAV infected |
6KR_infected |
| 11 |
SRR9602263 |
GSM3905834 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant |
Influenza A/WSN/33, MOI10 PFU/cell, 6hpi |
TRIM28 6KR IAV infected |
6KR_infected |
| 12 |
SRR9602264 |
GSM3905835 |
CRISPR/Cas9-edited TRIM28 KO lentivirally transduced with TRIM28 6KR mutant |
Influenza A/WSN/33, MOI10 PFU/cell, 6hpi |
TRIM28 6KR IAV infected |
6KR_infected |
The heatmap below shows the distances across the samples, which is greatly similar to the first half of the dataset. The mock infected samples are similar to each other and significantly different from the influenza infected samples. The influenza infected samples with the mutant TRIM28 gene are more similar to each other than the samples expressing the wild type TRIM28.

Similarly to the first analysis the presence of inluenza A is responsible for the great majority of the variance in the dataset, in this case 85% of the variance is explained by the first principal component.

Result of DESeq on the samples
out of 29791 with nonzero total read count
adjusted p-value < 0.1
LFC > 0 (up) : 6182, 21%
LFC < 0 (down) : 5187, 17%
outliers [1] : 15, 0.05%
low counts [2] : 7105, 24%
(mean count < 1)
[1] see 'cooksCutoff' argument of ?results
[2] see 'independentFiltering' argument of ?results
The initial result of the differential expression analysis is also highly similar to the first analysis. The number of genes with nonzero read count, low count and outliers are approximately the same resulting in about the same amount of differentially expressed genes based on the default treshold.
As in the first part of the dataset I introduced the same tresholds for the adjusted p-value and log2 fold change to further filter the initially obtained differentially expressed genes. (adjusted p-value <0.01 and |log2 fold change| > 2.) Based on this approach there are 2810 differentially expressed genes in this dataset.
The interactive volcano plot below shows the same features as the volcano plot of the first part of the dataset. The majority of the differentially expressed genes are upregulated and the log2 fold change ranges from 2 to 10.

The tables below shows the difference between the original gene counts and the counts after the variance stabilizing transformation in the first five genes of the heatmap.
Original gene counts:
| |
GSM3905830 |
GSM3905831 |
GSM3905832 |
GSM3905833 |
GSM3905834 |
GSM3905835 |
| CALCR |
0 |
0 |
0 |
49 |
94 |
69 |
| PIK3CG |
0 |
0 |
0 |
41 |
36 |
30 |
| ENDOU |
0 |
0 |
0 |
64 |
47 |
37 |
| BTN1A1 |
0 |
0 |
0 |
38 |
55 |
41 |
| OTOR |
0 |
0 |
0 |
77 |
74 |
55 |
Transformed gene counts:
| |
GSM3905830 |
GSM3905831 |
GSM3905832 |
GSM3905833 |
GSM3905834 |
GSM3905835 |
| CALCR |
3.491272 |
3.491272 |
3.491272 |
6.732144 |
7.752107 |
7.507246 |
| PIK3CG |
3.491272 |
3.491272 |
3.491272 |
6.196133 |
7.231953 |
6.231295 |
| ENDOU |
3.491272 |
3.491272 |
3.491272 |
7.260369 |
7.008946 |
6.432902 |
| BTN1A1 |
3.491272 |
3.491272 |
3.491272 |
6.388512 |
7.102980 |
6.896049 |
| OTOR |
3.491272 |
3.491272 |
3.491272 |
7.223277 |
7.467922 |
7.254628 |
The following plot shows the top biological processes that are enriched in the differentially expressed genes. Just like in the first half of the dataset the most enriched biological process is “leukocyte differentiation”. Beside that only the “positive regulation of leukocyte migration” biological process is present in both datasets in the 10 most enriched gene sets, which indicates significantly different immune response in the two datasets.

The following table shows the list of over-representated KEGG pathways in the differentially expressed genes which is identical with the over-represented pathways in the first dataset.
| Description |
GeneRatio |
p.adjust |
| Cytokine-cytokine receptor interaction |
46/596 |
0.0000000 |
| Viral protein interaction with cytokine and cytokine receptor |
23/596 |
0.0000000 |
| IL-17 signaling pathway |
22/596 |
0.0003400 |
| NF-kappa B signaling pathway |
21/596 |
0.0082176 |
| Staphylococcus aureus infection |
12/596 |
0.0165541 |
| TNF signaling pathway |
22/596 |
0.0180911 |
LS0tDQp0aXRsZTogPGNlbnRlcj4gPGgxPlJOQS1zZXEgYW5hbHlzaXMgb2Ygc2FtcGxlcyBleHByZXNzaW5nIG11dGFudCBUUklNMjggZ2VuZSAoVFJJTTI4IDZLUik8L2gxPiA8L2NlbnRlcj4NCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KDQoNCmBgYHtyIGxvYWRfcGFja2FnZXMsIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KEJpb2NNYW5hZ2VyKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkodHhpbXBvcnQpDQpsaWJyYXJ5KERFU2VxMikNCmxpYnJhcnkocGhlYXRtYXApDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGJpb21hUnQpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KbGlicmFyeShjbHVzdGVyUHJvZmlsZXIpDQpsaWJyYXJ5KG9yZy5Icy5lZy5kYikNCmxpYnJhcnkocGF0aHZpZXcpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpgYGANCg0KDQpgYGB7ciBsb2FkX2RhdGEsIGluY2x1ZGU9RkFMU0V9DQpzYW1wbGVfdGFibGUgPC0gYXMuZGF0YS5mcmFtZShyZWFkX2NzdigiLi4vU3JhUnVuVGFibGUudHh0IikpDQoNCnNhbXBsZV90YWJsZSA8LSBzZWxlY3Qoc2FtcGxlX3RhYmxlLCBSdW4sICdTYW1wbGUgTmFtZScsICdnZW5vdHlwZS92YXJpYXRpb24nLCAgaW5mZWN0aW9uLCBzb3VyY2VfbmFtZSkNCg0Kc2FtcGxlX3RhYmxlIDwtIHJlbmFtZShzYW1wbGVfdGFibGUsIHJ1bl9uYW1lPVJ1biwgc2FtcGxlX25hbWU9J1NhbXBsZSBOYW1lJykNCg0Kc2FtcGxlX3RhYmxlJHRyZWF0bWVudCA8LSBmYWN0b3IocmVwKGMoInd0X21vY2siLCAid3RfaW5mZWN0ZWQiLCAiNktSX21vY2siLCAiNktSX2luZmVjdGVkIiksIGVhY2ggPSAzKSwgbGV2ZWxzPSBjKCJ3dF9tb2NrIiwgInd0X2luZmVjdGVkIiwgIjZLUl9tb2NrIiwgIjZLUl9pbmZlY3RlZCIpKQ0KDQpzYW1wbGVfZmlsZXM9bGlzdC5maWxlcygiQzovQW5jc2kvQmlvaW5mb3JtYXRpY3MgU3VwcG9ydCBVbml0L3Byb2plY3RfdmlydXNfMjAyMC9zYWxtb25fb3V0cHV0IiwgZnVsbC5uYW1lcyA9IFRSVUUsIHJlY3Vyc2l2ZSA9IFRSVUUsIHBhdHRlcm4gPSAicXVhbnQuc2YiKQ0KDQpuYW1lcyhzYW1wbGVfZmlsZXMpID0gcHVsbChzYW1wbGVfdGFibGUsIHNhbXBsZV9uYW1lKQ0KDQpnZW5lX21hcCA8LSByZWFkX2NzdigiLi4vcHJvamVjdF8yMDIwX2dlbmVfbWFwLmNzdiIsIGNvbF9uYW1lcyA9IGMoImVuc3RfaWQiLCAiZW5zZ19pZCIpKQ0KDQpgYGANCg0KDQoNCmBgYHtyIDZLUl9kYXRhX2FuYWx5c2lzLCBpbmNsdWRlPUZBTFNFfQ0KDQpzYW1wbGVfdGFibGVfNktSID0gc2FtcGxlX3RhYmxlWzc6MTIsIF0NCg0Kc2FtcGxlX2ZpbGVzXzZLUiA9IHNhbXBsZV9maWxlc1s3OjEyXQ0KDQp0eGlfNktSID0gdHhpbXBvcnQoZmlsZXMgPSBzYW1wbGVfZmlsZXNfNktSLA0KICAgICAgICAgICAgICAgICAgdHlwZSA9ICJzYWxtb24iLA0KICAgICAgICAgICAgICAgICAgdHgyZ2VuZSA9IGdlbmVfbWFwLA0KICAgICAgICAgICAgICAgICAgaWdub3JlVHhWZXJzaW9uID0gVFJVRSkNCg0KZGRzXzZLUiA9IERFU2VxRGF0YVNldEZyb21UeGltcG9ydCh0eGkgPSB0eGlfNktSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbERhdGEgPSBzYW1wbGVfdGFibGVfNktSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbiA9IH4gdHJlYXRtZW50KQ0KDQpkZHNfNktSID0gREVTZXEoZGRzXzZLUikNCg0KdnN0XzZLUiA9IHZhcmlhbmNlU3RhYmlsaXppbmdUcmFuc2Zvcm1hdGlvbihkZHNfNktSKQ0KDQpkaXN0XzZLUiA9IGFzLm1hdHJpeChkaXN0KHQoYXNzYXkodnN0XzZLUikpKSkNCg0KYGBgDQoNClwgDQpcIA0KXCANCg0KDQoNCg0KDQoNClRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIG1ldGFkYXRhIG9mIHRoZSBleHBlcmltZW50LCBpbmNsdWRpbmcgdGhlIHNhbXBsZXMgdGhhdCBleHByZXNzZXMgbXV0YW50IFRSSU0yOCBnZW5lcy4NCg0KYGBge3IgNktSX21ldGEsIGVjaG89RkFMU0V9DQprYWJsZShzYW1wbGVfdGFibGVfNktSKSAlPiUga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoImJvcmRlcmVkIiwgImhvdmVyIiksIGZ1bGxfd2lkdGggPSBGLCBwb3NpdGlvbiA9ICJsZWZ0IikNCmBgYA0KDQoNClRoZSBoZWF0bWFwIGJlbG93IHNob3dzIHRoZSBkaXN0YW5jZXMgYWNyb3NzIHRoZSBzYW1wbGVzLCB3aGljaCBpcyBncmVhdGx5IHNpbWlsYXIgdG8gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGRhdGFzZXQuIFRoZSBtb2NrIGluZmVjdGVkIHNhbXBsZXMgYXJlIHNpbWlsYXIgdG8gZWFjaCBvdGhlciBhbmQgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5mbHVlbnphIGluZmVjdGVkIHNhbXBsZXMuIFRoZSBpbmZsdWVuemEgaW5mZWN0ZWQgc2FtcGxlcyB3aXRoIHRoZSBtdXRhbnQgVFJJTTI4IGdlbmUgYXJlIG1vcmUgc2ltaWxhciB0byBlYWNoIG90aGVyIHRoYW4gdGhlIHNhbXBsZXMgZXhwcmVzc2luZyB0aGUgd2lsZCB0eXBlIFRSSU0yOC4NCg0KYGBge3IgNktSX3NhbXBsZV9kaXN0LCBlY2hvPUZBTFNFfQ0KDQpwaGVhdG1hcChkaXN0XzZLUikNCg0KYGBgDQoNCg0KU2ltaWxhcmx5IHRvIHRoZSBmaXJzdCBhbmFseXNpcyB0aGUgcHJlc2VuY2Ugb2YgaW5sdWVuemEgQSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGdyZWF0IG1ham9yaXR5IG9mIHRoZSB2YXJpYW5jZSBpbiB0aGUgZGF0YXNldCwgaW4gdGhpcyBjYXNlIDg1JSBvZiB0aGUgdmFyaWFuY2UgaXMgZXhwbGFpbmVkIGJ5IHRoZSBmaXJzdCBwcmluY2lwYWwgY29tcG9uZW50Lg0KDQoNCmBgYHtyIDZLUl9wbG90cGNhLCBlY2hvPUZBTFNFfQ0KcGxvdFBDQSh2c3RfNktSLCBpbnRncm91cCA9ICJ0cmVhdG1lbnQiKQ0KYGBgDQoNCg0KYGBge3IgNktSX3Jlc3VsdCwgaW5jbHVkZT1GQUxTRX0NCg0KcmVzdWx0X2Rkc182S1IgPSByZXN1bHRzKGRkc182S1IsIGNvbnRyYXN0ID0gYygidHJlYXRtZW50IiwgIjZLUl9pbmZlY3RlZCIsIjZLUl9tb2NrIikpDQoNCmBgYA0KDQoNClJlc3VsdCBvZiBERVNlcSBvbiB0aGUgc2FtcGxlcyANCg0KYGBge3IgNktSX3Jlc3VsdF9zdW1tYXJ5LCBlY2hvPUZBTFNFfQ0Kc3VtbWFyeShyZXN1bHRfZGRzXzZLUikNCmBgYA0KDQpUaGUgaW5pdGlhbCByZXN1bHQgb2YgdGhlIGRpZmZlcmVudGlhbCBleHByZXNzaW9uIGFuYWx5c2lzIGlzIGFsc28gaGlnaGx5IHNpbWlsYXIgdG8gdGhlIGZpcnN0IGFuYWx5c2lzLiBUaGUgbnVtYmVyIG9mIGdlbmVzIHdpdGggbm9uemVybyByZWFkIGNvdW50LCBsb3cgY291bnQgYW5kIG91dGxpZXJzIGFyZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIHJlc3VsdGluZyBpbiBhYm91dCB0aGUgc2FtZSBhbW91bnQgb2YgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGJhc2VkIG9uIHRoZSBkZWZhdWx0IHRyZXNob2xkLg0KDQpBcyBpbiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZGF0YXNldCBJIGludHJvZHVjZWQgdGhlIHNhbWUgdHJlc2hvbGRzIGZvciB0aGUgYWRqdXN0ZWQgcC12YWx1ZSBhbmQgbG9nMiBmb2xkIGNoYW5nZSB0byBmdXJ0aGVyIGZpbHRlciB0aGUgaW5pdGlhbGx5IG9idGFpbmVkIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBnZW5lcy4gKGFkanVzdGVkIHAtdmFsdWUgPDAuMDEgYW5kIHxsb2cyIGZvbGQgY2hhbmdlfCA+IDIuKQ0KQmFzZWQgb24gdGhpcyBhcHByb2FjaCB0aGVyZSBhcmUgMjgxMCBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQgZ2VuZXMgaW4gdGhpcyBkYXRhc2V0Lg0KDQoNCg0KDQpgYGB7ciA2S1JfYW5ub3RhdGlvbiwgaW5jbHVkZT1GQUxTRX0NCnJlc3VsdF9kZHNfNktSX2RmID0gYXMuZGF0YS5mcmFtZShyZXN1bHRfZGRzXzZLUikNCg0KZGRzXzZLUl9maWx0ZXIxID0gcmVzdWx0X2Rkc182S1JfZGZbIGNvbXBsZXRlLmNhc2VzKHJlc3VsdF9kZHNfNktSX2RmKSwgXQ0KDQoNCmRkc182S1JfZmlsdGVyMSA9IHJvd25hbWVzX3RvX2NvbHVtbihkZHNfNktSX2ZpbHRlcjEsIHZhciA9ICdlbnNnX2lkJykNCg0KDQplbnNlbWJsMTAwID0gdXNlRW5zZW1ibChiaW9tYXJ0ID0gJ2Vuc2VtYmwnLCBkYXRhc2V0ID0gJ2hzYXBpZW5zX2dlbmVfZW5zZW1ibCcpDQoNCmFubm90YXRpb25fNktSID0gZ2V0Qk0oYXR0cmlidXRlcyA9IGMoJ2Vuc2VtYmxfZ2VuZV9pZCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VudHJlemdlbmVfaWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRlcm5hbF9nZW5lX25hbWUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaHJvbW9zb21lX25hbWUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjcmlwdGlvbicpLA0KICAgICAgICAgICAgICAgICAgZmlsdGVycyA9ICdlbnNlbWJsX2dlbmVfaWQnLA0KICAgICAgICAgICAgICAgICAgdmFsdWVzID0gZGRzXzZLUl9maWx0ZXIxJGVuc2dfaWQsDQogICAgICAgICAgICAgICAgICBtYXJ0ID0gZW5zZW1ibDEwMCkNCg0KYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMSA9IGxlZnRfam9pbihkZHNfNktSX2ZpbHRlcjEsIGFubm90YXRpb25fNktSLCBieSA9IGMoJ2Vuc2dfaWQnID0gJ2Vuc2VtYmxfZ2VuZV9pZCcpICkNCmBgYA0KDQoNCg0KYGBge3IgNktSX3ZvbGNhbm9fc2NyaXB0LCBpbmNsdWRlPSBGQUxTRX0NCg0KIyBhZGRpbmcgYSBuZXcgY29sdW1uIHdpdGggbG9naWNhbCB2YWx1ZXMgZGVjaWRpbmcgd2hldGhlciBhIGdlbmUgaXMgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIG9yIG5vdA0KYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMSRkaWZmX2dlbmVzID0gYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMSRwYWRqIDwgMC4wMSAmIGFicyhhbm5vdGF0ZWRfZGRzXzZLUl9maWx0ZXIxJGxvZzJGb2xkQ2hhbmdlKSA+IDINCg0KYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMSRzaGFwZSA9IGlmZWxzZSgoLWxvZzEwKGFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkcGFkaik+NTApLCAidHJpYW5nbGUiLCAiY2lyY2xlIikNCmFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkbGltaXRlZF9wYWRqID0gLWxvZzEwKGFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkcGFkaikNCmFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkbGltaXRlZF9wYWRqW2Fubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEkbGltaXRlZF9wYWRqPjUwXSA9IDUwDQoNCiMgdGhlcmUgYXJlIDE3IGdlbmVzIHdpdGggLWxvZzEwIHBhZGogNTAgb3IgYWJvdmUgNTANCg0KDQp2b2xjYW5vX3Bsb3RfNktSID0gZ2dwbG90KGFubm90YXRlZF9kZHNfNktSX2ZpbHRlcjEsIGFlcyh4ID0gbG9nMkZvbGRDaGFuZ2UsIHkgPSBsaW1pdGVkX3BhZGosIGNvbG91ciA9IGRpZmZfZ2VuZXMsIHNoYXBlID0gc2hhcGUsIG5hbWUgPSBleHRlcm5hbF9nZW5lX25hbWUpKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJibGFjayIsICJyZWQiKSkgKw0KICBnZW9tX3BvaW50KHNpemUgPSAxLjUsIGFscGhhID0gMC4yKSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDIsIGNvbG91ciA9ICdncmV5JywgbGluZXR5cGUgPSAyKSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IC0yLCBjb2xvdXIgPSAnZ3JleScsIGxpbmV0eXBlID0gMikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtbG9nMTAoMC4wMSksIGNvbG91ciA9ICdncmV5JywgbGluZXR5cGUgPSAyKSArDQogIHhsaW0oLTEwLCAxMCkgKw0KICB5bGltKDAsIDUwKSArDQogIHRoZW1lX2J3KCkgKw0KICBsYWJzKHRpdGxlID0gIlZvbGNhbm8gcGxvdCBvZiBtdXRhbnQgVFJJTTI4IHNhbXBsZXMiLA0KICAgICAgIHggPSAiTG9nMkZvbGRDaGFuZ2Ugb2YgZ2VuZSBleHByZXNzaW9uIiwNCiAgICAgICB5ID0gIi1sb2cxMCBvZiB0aGUgYWRqdXN0ZWQgcC12YWx1ZSIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gJ25vbmUnLA0KICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2U9ImJvbGQiLCBzaXplPTEyLCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUgLGZhY2U9ImJvbGQiLCBzaXplPTE0KSwgDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemU9MTIpKQ0KDQpgYGANCg0KDQpUaGUgaW50ZXJhY3RpdmUgdm9sY2FubyBwbG90IGJlbG93IHNob3dzIHRoZSBzYW1lIGZlYXR1cmVzIGFzIHRoZSB2b2xjYW5vIHBsb3Qgb2YgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRhdGFzZXQuIFRoZSBtYWpvcml0eSBvZiB0aGUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIGFyZSB1cHJlZ3VsYXRlZCBhbmQgdGhlIGxvZzIgZm9sZCBjaGFuZ2UgcmFuZ2VzIGZyb20gMiB0byAxMC4gDQoNCmBgYHtyIDZLUl92b2xjYW5vX3Bsb3QsIGVjaG89RkFMU0V9DQpnZ3Bsb3RseSh2b2xjYW5vX3Bsb3RfNktSKQ0KYGBgDQoNCg0KDQoNCmBgYHtyIDJfNktSX2ZpbHRlcmluZywgaW5jbHVkZT1GQUxTRX0NCmRkc182S1JfZmlsdGVyMiA9IGRkc182S1JfZmlsdGVyMVtkZHNfNktSX2ZpbHRlcjEkcGFkaiA8IDAuMDEsIF0NCg0KZGRzXzZLUl9maWx0ZXIzID0gZGRzXzZLUl9maWx0ZXIyWyBhYnMoZGRzXzZLUl9maWx0ZXIyJGxvZzJGb2xkQ2hhbmdlKSA+IDIsIF0NCg0KI2Rkc182S1JfZmlsdGVyMyA9IHJvd25hbWVzX3RvX2NvbHVtbihkZHNfNktSX2ZpbHRlcjMsIHZhciA9ICJlbnNnX2lkIikNCg0KYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMyA9IGxlZnRfam9pbihkZHNfNktSX2ZpbHRlcjMsIGFubm90YXRpb25fNktSLCBieSA9IGMoImVuc2dfaWQiID0gImVuc2VtYmxfZ2VuZV9pZCIpKQ0KYGBgDQoNCg0KDQpgYGB7ciA2S1JfdG9wXzI1X2dlbmVzLCBpbmNsdWRlPUZBTFNFfQ0KdG9wXzI1XzZLUiA9IGFycmFuZ2UoYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMywgZGVzYyhhYnMobG9nMkZvbGRDaGFuZ2UpKSlbMToyNSwgXQ0KDQpnZW5lc18yNV82S1IgPSB0b3BfMjVfNktSJGVuc2dfaWQNCg0KbmFtZXMoZ2VuZXNfMjVfNktSKSA9IHRvcF8yNV82S1IkZXh0ZXJuYWxfZ2VuZV9uYW1lDQoNCg0KdG9wXzI1X3ZzdF82S1IgPSBhc3NheSh2c3RfNktSKVtnZW5lc18yNV82S1IsIF0NCg0Kcm93bmFtZXModG9wXzI1X3ZzdF82S1IpID0gbmFtZXMoZ2VuZXNfMjVfNktSKQ0KDQpgYGANCg0KDQoNCmBgYHtyIDZLUl9jb2xvdXJzLCBpbmNsdWRlPUZBTFNFfQ0KY29sb3JzID0gY29sb3JSYW1wUGFsZXR0ZShicmV3ZXIucGFsKDcsICJCbHVlcyIpKSgxMDApDQpgYGANCg0KDQoNCg0KYGBge3IgNktSX3RvcF8yNV9oZWF0bWFwLCBlY2hvPUZBTFNFfQ0KDQpwaGVhdG1hcCh0b3BfMjVfdnN0XzZLUiwgZm9udHNpemUgPSA3LCBjb2xvciA9IGNvbG9ycywgY3V0cmVlX2NvbHMgPSAyKQ0KDQpgYGANCg0KDQoNCmBgYHtyIDZLUl81LCBpbmNsdWRlPUZBTFNFfQ0KY291bnRfNV82S1IgPSBhcy5kYXRhLmZyYW1lKGNvdW50cyhkZHNfNktSKSkNCg0KY291bnRfNV82S1IgPSByb3duYW1lc190b19jb2x1bW4oY291bnRfNV82S1IsIHZhciA9ICJlbnNnX2lkIikNCg0KY291bnRfNV82S1IgPSAgY291bnRfNV82S1JbY291bnRfNV82S1IkZW5zZ19pZCAgJWluJSBnZW5lc18yNV82S1IsIF1bMTo1LCBdDQoNCmNvdW50XzVfNktSID0gbGVmdF9qb2luKGNvdW50XzVfNktSLCBhbm5vdGF0aW9uXzZLUlsgLCBjKCdlbnNlbWJsX2dlbmVfaWQnLCdleHRlcm5hbF9nZW5lX25hbWUnKV0sIGJ5ID0gYygiZW5zZ19pZCIgPSAiZW5zZW1ibF9nZW5lX2lkIikpDQoNCmNvdW50XzVfNktSID0gY29sdW1uX3RvX3Jvd25hbWVzKGNvdW50XzVfNktSLCdleHRlcm5hbF9nZW5lX25hbWUnICkNCg0KY291bnRfNV82S1IkZW5zZ19pZCA9IE5VTEwNCg0KDQphc3NheV81XzZLUiA9IGFzLmRhdGEuZnJhbWUoYXNzYXkodnN0XzZLUikpDQoNCmFzc2F5XzVfNktSID0gcm93bmFtZXNfdG9fY29sdW1uKGFzc2F5XzVfNktSLCB2YXIgPSAiZW5zZ19pZCIpDQoNCmFzc2F5XzVfNktSID0gIGFzc2F5XzVfNktSW2Fzc2F5XzVfNktSJGVuc2dfaWQgICVpbiUgZ2VuZXNfMjVfNktSLCBdWzE6NSwgXQ0KDQphc3NheV81XzZLUiA9IGxlZnRfam9pbihhc3NheV81XzZLUiwgYW5ub3RhdGlvbl82S1JbICwgYygnZW5zZW1ibF9nZW5lX2lkJywnZXh0ZXJuYWxfZ2VuZV9uYW1lJyldLCBieSA9IGMoImVuc2dfaWQiID0gImVuc2VtYmxfZ2VuZV9pZCIpKQ0KDQphc3NheV81XzZLUiA9IGNvbHVtbl90b19yb3duYW1lcyhhc3NheV81XzZLUiwnZXh0ZXJuYWxfZ2VuZV9uYW1lJyApDQoNCmFzc2F5XzVfNktSJGVuc2dfaWQgPSBOVUxMDQpgYGANCg0KDQpUaGUgdGFibGVzIGJlbG93IHNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG9yaWdpbmFsIGdlbmUgY291bnRzIGFuZCB0aGUgY291bnRzIGFmdGVyIHRoZSB2YXJpYW5jZSBzdGFiaWxpemluZyB0cmFuc2Zvcm1hdGlvbiBpbiB0aGUgZmlyc3QgZml2ZSBnZW5lcyBvZiB0aGUgaGVhdG1hcC4NCg0KT3JpZ2luYWwgZ2VuZSBjb3VudHM6DQoNCmBgYHtyIHRhYmxlX2NvdW50LCBlY2hvPUZBTFNFfQ0Ka2FibGUoY291bnRfNV82S1IpICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNCg0KVHJhbnNmb3JtZWQgZ2VuZSBjb3VudHM6DQoNCmBgYHtyIHRhYmxlX2Fzc2F5LCBlY2hvPUZBTFNFfQ0Ka2FibGUoYXNzYXlfNV82S1IpICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygiYm9yZGVyZWQiLCAiaG92ZXIiKSwgZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCmBgYHtyIDZLUl9nZW5lX3NldF9lbnJpY2htZW50LCBpbmNsdWRlPUZBTFNFfQ0KDQplbnRyZXpfZ2VuZV82S1IgPSBhcy5jaGFyYWN0ZXIoYW5ub3RhdGVkX2Rkc182S1JfZmlsdGVyMyRlbnRyZXpnZW5lX2lkKQ0KDQplbnRyZXpfdW5pXzZLUiA9IGFzLmNoYXJhY3Rlcihhbm5vdGF0ZWRfZGRzXzZLUl9maWx0ZXIxJGVudHJlemdlbmVfaWQpDQoNCg0KZWdvXzZLUiA9IGVucmljaEdPKGdlbmUgPSBlbnRyZXpfZ2VuZV82S1IsDQogICAgICAgICAgICAgICAgICBPcmdEYiA9IG9yZy5Icy5lZy5kYiwNCiAgICAgICAgICAgICAgICAgIG9udCA9ICJCUCIsDQogICAgICAgICAgICAgICAgICB1bml2ZXJzZSA9IGVudHJlel91bmlfNktSLA0KICAgICAgICAgICAgICAgICAgcmVhZGFibGUgPSBUUlVFKQ0KDQoNCmBgYA0KDQpUaGUgZm9sbG93aW5nIHBsb3Qgc2hvd3MgdGhlIHRvcCBiaW9sb2dpY2FsIHByb2Nlc3NlcyB0aGF0IGFyZSBlbnJpY2hlZCBpbiB0aGUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzLiBKdXN0IGxpa2UgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGRhdGFzZXQgdGhlIG1vc3QgZW5yaWNoZWQgYmlvbG9naWNhbCBwcm9jZXNzIGlzICJsZXVrb2N5dGUgZGlmZmVyZW50aWF0aW9uIi4gQmVzaWRlIHRoYXQgb25seSB0aGUgInBvc2l0aXZlIHJlZ3VsYXRpb24gb2YgbGV1a29jeXRlIG1pZ3JhdGlvbiIgYmlvbG9naWNhbCBwcm9jZXNzIGlzIHByZXNlbnQgaW4gYm90aCBkYXRhc2V0cyBpbiB0aGUgMTAgbW9zdCBlbnJpY2hlZCBnZW5lIHNldHMsIHdoaWNoIGluZGljYXRlcyBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBpbW11bmUgcmVzcG9uc2UgaW4gdGhlIHR3byBkYXRhc2V0cy4NCg0KYGBge3IgNktSX2RvdHBsb3RfZW5yaWNobWVudCwgZWNobz1GQUxTRX0NCmRvdHBsb3QoZWdvXzZLUikNCg0KYGBgDQoNCg0KDQpgYGB7ciA2S1Jfa2VnZywgaW5jbHVkZT1GQUxTRX0NCmtlZ2dfcGF0aHdheV82S1IgPSBlbnJpY2hLRUdHKGdlbmUgPSBlbnRyZXpfZ2VuZV82S1IsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNlID0gZW50cmV6X3VuaV82S1IpDQoNCmtlZ2dfNktSX2RmID0gYXMuZGF0YS5mcmFtZShrZWdnX3BhdGh3YXlfNktSKQ0KDQpgYGANCg0KVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyB0aGUgbGlzdCBvZiBvdmVyLXJlcHJlc2VudGF0ZWQgS0VHRyBwYXRod2F5cyBpbiB0aGUgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIHdoaWNoIGlzIGlkZW50aWNhbCB3aXRoIHRoZSBvdmVyLXJlcHJlc2VudGVkIHBhdGh3YXlzIGluIHRoZSBmaXJzdCBkYXRhc2V0Lg0KDQpgYGB7ciBrZWdnX3RhYmxlXzZLUiwgZWNobz1GQUxTRX0NCmthYmxlKGtlZ2dfd3RfbWFpbikgJT4lIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJib3JkZXJlZCIsICJob3ZlciIpLCBmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIpDQpgYGANCg0KDQo=